Various levels of abstraction exist within computer architecture, from the physical representation of ones and zeros to high-level application programs. When computers were initially developed, a low-level programming language commonly referred to as machine language was generally used to control their operation. However, in order to create the same program for two different computer platforms with different machine languages, programmers had to write the program twice-once in each platform's machine language.
Computer programmers learned that machine language could be abstracted by creating higher-level programming languages, such as C and Pascal, and then providing a compiler for each platform on which the program was to be used. When a program was written in one of these higher-level programming languages, the program could be compiled to run on each specific machine, without having to rewrite the source program for each machine. Abstractions in this regard continued, resulting in the more recent development of virtual machines.
The notion of a virtual machine is well known in the art of computer science. A virtual machine is an intermediate representation that is not tied to the specific details of a particular computer hardware architecture. Typically a virtual machine will guarantee certain semantics that remain identical regardless of the hardware used to implement it. Therefore a program which has been written for such a machine can be executed on different hardware systems without modification. Thus, one advantage of a virtual machine is that its operational semantics remain constant from one computer program to the next regardless of the origin or operating requirements of any one computer program.
Computer networks are dependent on the underlying physical hardware and network protocols on which the network is constructed. These protocols in turn are dependent on the underlying network architecture on which they are implemented. As a result, network applications must be rewritten for each network on which they are to be used. In addition, in order for two machines to communicate over a network, each machine must understand how to communicate over the specific network, i.e., each machine must have the appropriate network drivers to communicate.
One level of abstraction that has been implemented in computer networks is the use of a TCP/IP protocol stack, as implemented according to the OSI seven-layer network model. TCP/IP abstracts some notions of network protocols, allowing two machines that each understand the TCP/IP protocols to effectively communicate with each other. However, even using TCP/IP, each machine must, at some level, be able to understand network routing and topology, bindings, and DNS resolution. That is, each computer on a network must still have substantial network support utilities installed in order to effectively communicate over the network, because the OSI model only virtualizes the physical wire between the machines, and not the network through which the machines communicate.
For example, TCP/IP requires applications to understand the concepts of ports and IP addresses. Ports and IP addresses, in turn, require applications to understand DNS name resolution, network topology, transport bandwidths and end-to-end routing. Thus, while simplifying the model for exchanging ordered sequences of bytes in a reliable manner, the application still must deal directly with many network level concepts and details. The OSI model does not address higher-level constructs, such as naming, routing, and quality of service, as needed by network applications.
Another shortcoming of conventional networks is the inability to adapt and rehabilitate after a message error or network failure. Present networks cannot easily adapt automatically when machines are added, moved, or removed. That is, a user typically must edit routing tables to inform the network of the change.
In addition, network failures are not easily fixed, other than by maintaining redundant machines that perform the same function. That is, if a first machine fails, then the second (backup) machine takes over the first machine's functions. However, if the second machine subsequently fails, and there is no third machine that performs the same functions, the network will suffer as a result. Known networks are not self-healing. Thus, an advanced network that overcomes these problems is needed.
Another shortcoming of conventional networks is their inability to dynamically route network messages based on message contents. Known routers by Cisco Systems, Inc. are capable of routing messages based on predefined criteria, but are not dynamically programmable to support user-extensible routing behavior based on message content. This inability makes them inappropriate for systems in which applications can control transformations and processing of messages, in addition to the traditional routing and QoS requirements.
It would be an advancement in the art to provide a method and system that solves some or all of the above-identified problems.